library(tidyverse)
Warning: package ‘tidyverse’ was built under R version 4.2.3Warning: package ‘ggplot2’ was built under R version 4.2.3Warning: package ‘tibble’ was built under R version 4.2.3Warning: package ‘tidyr’ was built under R version 4.2.3Warning: package ‘readr’ was built under R version 4.2.3Warning: package ‘purrr’ was built under R version 4.2.3Warning: package ‘dplyr’ was built under R version 4.2.3Warning: package ‘forcats’ was built under R version 4.2.3Warning: package ‘lubridate’ was built under R version 4.2.3── Attaching core tidyverse packages ──────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.2 ✔ readr 2.1.4
✔ forcats 1.0.0 ✔ stringr 1.5.0
✔ ggplot2 3.4.2 ✔ tibble 3.2.1
✔ lubridate 1.9.2 ✔ tidyr 1.3.0
✔ purrr 1.0.1 ── Conflicts ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
library(CodeClanData)
Attaching package: ‘CodeClanData’
The following object is masked from ‘package:dplyr’:
starwars
The following object is masked from ‘package:tidyr’:
population
library(plotly)
Warning: package ‘plotly’ was built under R version 4.2.3
Attaching package: ‘plotly’
The following object is masked from ‘package:ggplot2’:
last_plot
The following object is masked from ‘package:stats’:
filter
The following object is masked from ‘package:graphics’:
layout
game_sales
game_sales %>%
group_by(publisher, year_of_release) %>%
summarise(num_games_released = n()) %>%
plot_ly(x = ~ year_of_release,
y = ~ num_games_released,
color = ~ publisher,
mode = "lines",
text = ~ publisher,
hovertemplate = '<b>%{text}',
showlegend = F) %>%
highlight(on = "plotly_hover")
`summarise()` has grouped output by 'publisher'. You can override using the `.groups` argument.No trace type specified:
Based on info supplied, a 'scatter' trace seems appropriate.
Read more about this trace type -> https://plotly.com/r/reference/#scatter
Warning: n too large, allowed maximum for palette Set2 is 8
Returning the palette you asked for with that many colors
Warning: n too large, allowed maximum for palette Set2 is 8
Returning the palette you asked for with that many colors
No trace type specified:
Based on info supplied, a 'scatter' trace seems appropriate.
Read more about this trace type -> https://plotly.com/r/reference/#scatter
Warning: n too large, allowed maximum for palette Set2 is 8
Returning the palette you asked for with that many colors
Warning: n too large, allowed maximum for palette Set2 is 8
Returning the palette you asked for with that many colors
game_sales %>%
group_by(publisher) %>%
summarise(avg_rating = mean(user_score)) %>%
ggplot(aes(reorder(publisher, avg_rating), avg_rating)) +
geom_col() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))


game_sales %>%
filter(publisher == "Nintendo") %>%
group_by(name) %>%
summarise(user_score = mean(user_score),
critic_score = mean(critic_score)/10) %>%
arrange(desc(user_score)) %>%
slice_head(n = 10) %>%
pivot_longer(user_score:critic_score, names_to = "reviewer", values_to = "score") %>%
ggplot() +
geom_col(aes(x = reorder(name, -score), y = score, fill = reviewer),
position = "dodge",
#fill = "lavenderblush2"
) +
# geom_point(aes(x = name, y = critic_score),
# #position = "dodge",
# colour = "deeppink2") +
theme(axis.text.x = element_text(angle = 45, hjust = 1),
panel.grid = element_blank()) +
labs(
title = "Top 10 Games Released by Selected Publisher",
x = "",
y = "Rating"
)


game_sales %>%
group_by(publisher, platform) %>%
summarise(total_games = n()) %>%
ggplot(aes(publisher, total_games, fill = platform)) +
geom_col() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
`summarise()` has grouped output by 'publisher'. You can override using the `.groups` argument.

game_sales <- game_sales %>%
mutate(platform_cat = case_when(
str_detect(platform, "PS") ~ "Playstation",
str_detect(platform, "X") ~ "Xbox",
str_detect(platform, "Wii") ~ "Nintendo Wii",
str_detect(platform, "GC") ~ "Nintendo Gamecube",
str_detect(platform, "GB") ~ "Nintendo Game Boy",
str_detect(platform, "DS") ~ "Nintendo DS",
.default = platform
))
game_sales %>%
group_by(publisher, platform_cat) %>%
summarise(total_games = n()) %>%
ggplot(aes(reorder(publisher, -total_games, sum), total_games, fill = platform_cat)) +
geom_col() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
scale_fill_manual(values = c(
"Xbox" = "darkgreen",
"Playstation" = "blue",
"Nintendo Gamecube" = "red1",
"Nintendo DS" = "red2",
"Nintendo Wii" = "red3",
"Nintendo Game Boy" = "red4",
"PC" = "black")
)
`summarise()` has grouped output by 'publisher'. You can override using the `.groups` argument.

Games by publisher
colour_scheme <- c(
"Xbox" = "darkgreen",
"Playstation" = "blue",
"Nintendo Gamecube" = "red1",
"Nintendo DS" = "red2",
"Nintendo Wii" = "red3",
"Nintendo Game Boy" = "red4",
"PC" = "black")
game_sales %>%
group_by(publisher, platform_cat) %>%
summarise(total_games = n()) %>%
plot_ly(y = ~ reorder(publisher, total_games, sum),
x = ~ total_games,
color = ~ platform_cat,
colors = colour_scheme,
type = "bar"
) %>%
layout(barmode = "stack",
title = "Number of Games Released by Publisher Across Each Platform",
yaxis = list(title = ""),
xaxis = list(title = "Number of Games released")
)
`summarise()` has grouped output by 'publisher'. You can override using the `.groups` argument.

game_sales %>%
group_by(platform_cat, platform) %>%
summarise(total = n()) %>%
ggplot(aes(platform_cat, total, fill = platform)) +
geom_col() +
geom_text(aes(label = platform))
`summarise()` has grouped output by 'platform_cat'. You can override using the `.groups` argument.

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShDb2RlQ2xhbkRhdGEpDQpsaWJyYXJ5KHBsb3RseSkNCg0KZ2FtZV9zYWxlcw0KYGBgDQoNCmBgYHtyfQ0KZ2FtZV9zYWxlcyAlPiUgDQogIGdyb3VwX2J5KHB1Ymxpc2hlciwgeWVhcl9vZl9yZWxlYXNlKSAlPiUgDQogIHN1bW1hcmlzZShudW1fZ2FtZXNfcmVsZWFzZWQgPSBuKCkpICU+JSANCiAgcGxvdF9seSh4ID0gfiB5ZWFyX29mX3JlbGVhc2UsDQogICAgICAgICAgeSA9IH4gbnVtX2dhbWVzX3JlbGVhc2VkLA0KICAgICAgICAgIGNvbG9yID0gfiBwdWJsaXNoZXIsDQogICAgICAgICAgbW9kZSA9ICJsaW5lcyIsIA0KICAgICAgICAgIHRleHQgPSB+IHB1Ymxpc2hlciwNCiAgICAgICAgICBob3ZlcnRlbXBsYXRlID0gJzxiPiV7dGV4dH0nLA0KICAgICAgICAgIHNob3dsZWdlbmQgPSBGKSAlPiUgDQogIGhpZ2hsaWdodChvbiA9ICJwbG90bHlfaG92ZXIiKQ0KYGBgDQoNCmBgYHtyfQ0KZ2FtZV9zYWxlcyAlPiUgDQogIGdyb3VwX2J5KHB1Ymxpc2hlcikgJT4lIA0KICBzdW1tYXJpc2UoYXZnX3JhdGluZyA9IG1lYW4odXNlcl9zY29yZSkpICU+JSANCiAgZ2dwbG90KGFlcyhyZW9yZGVyKHB1Ymxpc2hlciwgLWF2Z19yYXRpbmcpLCBhdmdfcmF0aW5nKSkgKw0KICBnZW9tX2NvbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSkNCmBgYA0KDQpgYGB7cn0NCmdhbWVfc2FsZXMgJT4lIA0KICBmaWx0ZXIocHVibGlzaGVyID09ICJBY3RpdmlzaW9uIikgJT4lIA0KICBncm91cF9ieShuYW1lKSAlPiUgDQogIHN1bW1hcmlzZSh1c2VyX3Njb3JlID0gbWVhbih1c2VyX3Njb3JlKSwNCiAgICAgICAgICAgIGNyaXRpY19zY29yZSA9IG1lYW4oY3JpdGljX3Njb3JlKS8xMCkgJT4lIA0KICBhcnJhbmdlKGRlc2ModXNlcl9zY29yZSkpICU+JSANCiAgc2xpY2VfaGVhZChuID0gMTApICU+JSANCiAgZ2dwbG90KCkgKw0KICBnZW9tX2NvbChhZXMoeCA9IHJlb3JkZXIobmFtZSwgdXNlcl9zY29yZSksIHkgPSB1c2VyX3Njb3JlKSwgcG9zaXRpb24gPSAiZG9kZ2UiLCBmaWxsID0gImRhcmtvbGl2ZWdyZWVuNCIpICsNCiAgZ2VvbV9wb2ludChhZXMoeCA9IG5hbWUsIHkgPSBjcml0aWNfc2NvcmUpLCBwb3NpdGlvbiA9ICJkb2RnZSIsIGNvbG91ciA9ICJicm93bjQiKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkpDQpgYGANCg0KYGBge3J9DQpnYW1lX3NhbGVzICU+JSANCiAgZmlsdGVyKHB1Ymxpc2hlciA9PSAiTmludGVuZG8iKSAlPiUgDQogIGdyb3VwX2J5KG5hbWUpICU+JSANCiAgc3VtbWFyaXNlKHVzZXJfc2NvcmUgPSBtZWFuKHVzZXJfc2NvcmUpLA0KICAgICAgICAgICAgY3JpdGljX3Njb3JlID0gbWVhbihjcml0aWNfc2NvcmUpLzEwKSAlPiUgDQogIGFycmFuZ2UoZGVzYyh1c2VyX3Njb3JlKSkgJT4lIA0KICBzbGljZV9oZWFkKG4gPSAxMCkgJT4lIA0KICBwaXZvdF9sb25nZXIodXNlcl9zY29yZTpjcml0aWNfc2NvcmUsIG5hbWVzX3RvID0gIlJldmlld2VyIiwgdmFsdWVzX3RvID0gInNjb3JlIikgJT4lIA0KICBnZ3Bsb3QoKSArDQogIGdlb21fY29sKGFlcyh4ID0gcmVvcmRlcihuYW1lLCAtc2NvcmUpLCB5ID0gc2NvcmUsIGZpbGwgPSBSZXZpZXdlciksDQogICAgICAgICAgIHBvc2l0aW9uID0gImRvZGdlIiwNCiAgICAgICAgICAgI2ZpbGwgPSAibGF2ZW5kZXJibHVzaDIiDQogICkgKw0KICAjIGdlb21fcG9pbnQoYWVzKHggPSBuYW1lLCB5ID0gY3JpdGljX3Njb3JlKSwNCiAgIyAgICAgICAgICAgICNwb3NpdGlvbiA9ICJkb2RnZSIsDQogICMgICAgICAgICAgICBjb2xvdXIgPSAiZGVlcHBpbmsyIikgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpLA0KICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiVG9wIDEwIEdhbWVzIFJlbGVhc2VkIGJ5IFNlbGVjdGVkIFB1Ymxpc2hlciIsDQogICAgeCA9ICIiLA0KICAgIHkgPSAiUmF0aW5nIg0KICApDQpgYGANCg0KDQoNCg0KYGBge3J9DQpnYW1lX3NhbGVzICU+JSANCiAgZ3JvdXBfYnkocHVibGlzaGVyKSAlPiUgDQogIHN1bW1hcmlzZSh0b3RhbF9nYW1lcyA9IG4oKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHJlb3JkZXIocHVibGlzaGVyLCAtdG90YWxfZ2FtZXMpLCB0b3RhbF9nYW1lcykpICsNCiAgZ2VvbV9jb2woKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkpDQpgYGANCg0KYGBge3J9DQpnYW1lX3NhbGVzICU+JSANCiAgZ3JvdXBfYnkocHVibGlzaGVyLCBwbGF0Zm9ybSkgJT4lIA0KICBzdW1tYXJpc2UodG90YWxfZ2FtZXMgPSBuKCkpICU+JSANCiAgZ2dwbG90KGFlcyhwdWJsaXNoZXIsIHRvdGFsX2dhbWVzLCBmaWxsID0gcGxhdGZvcm0pKSArDQogIGdlb21fY29sKCkgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpKQ0KYGBgDQoNCmBgYHtyfQ0KZ2FtZV9zYWxlcyA8LSBnYW1lX3NhbGVzICU+JSANCiAgbXV0YXRlKHBsYXRmb3JtX2NhdCA9IGNhc2Vfd2hlbigNCiAgICBzdHJfZGV0ZWN0KHBsYXRmb3JtLCAiUFMiKSB+ICJQbGF5c3RhdGlvbiIsDQogICAgc3RyX2RldGVjdChwbGF0Zm9ybSwgIlgiKSB+ICJYYm94IiwNCiAgICBzdHJfZGV0ZWN0KHBsYXRmb3JtLCAiV2lpIikgfiAiTmludGVuZG8gV2lpIiwNCiAgICBzdHJfZGV0ZWN0KHBsYXRmb3JtLCAiR0MiKSB+ICJOaW50ZW5kbyBHYW1lY3ViZSIsDQogICAgc3RyX2RldGVjdChwbGF0Zm9ybSwgIkdCIikgfiAiTmludGVuZG8gR2FtZSBCb3kiLA0KICAgIHN0cl9kZXRlY3QocGxhdGZvcm0sICJEUyIpIH4gIk5pbnRlbmRvIERTIiwNCiAgICAuZGVmYXVsdCA9IHBsYXRmb3JtDQogICkpDQpgYGANCg0KYGBge3J9DQpnYW1lX3NhbGVzICU+JSANCiAgZ3JvdXBfYnkocHVibGlzaGVyLCBwbGF0Zm9ybV9jYXQpICU+JSANCiAgc3VtbWFyaXNlKHRvdGFsX2dhbWVzID0gbigpKSAlPiUgDQogIGdncGxvdChhZXMocmVvcmRlcihwdWJsaXNoZXIsIC10b3RhbF9nYW1lcywgc3VtKSwgdG90YWxfZ2FtZXMsIGZpbGwgPSBwbGF0Zm9ybV9jYXQpKSArDQogIGdlb21fY29sKCkgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoDQogICAgIlhib3giID0gImRhcmtncmVlbiIsDQogICAgIlBsYXlzdGF0aW9uIiA9ICJibHVlIiwNCiAgICAiTmludGVuZG8gR2FtZWN1YmUiID0gInJlZDEiLA0KICAgICJOaW50ZW5kbyBEUyIgPSAicmVkMiIsDQogICAgIk5pbnRlbmRvIFdpaSIgPSAicmVkMyIsDQogICAgIk5pbnRlbmRvIEdhbWUgQm95IiA9ICJyZWQ0IiwNCiAgICAiUEMiID0gImJsYWNrIikNCiAgKQ0KYGBgDQojIEdhbWVzIGJ5IHB1Ymxpc2hlcg0KYGBge3J9DQpjb2xvdXJfc2NoZW1lIDwtIGMoDQogICJYYm94IiA9ICJkYXJrZ3JlZW4iLA0KICAiUGxheXN0YXRpb24iID0gImJsdWUiLA0KICAiTmludGVuZG8gR2FtZWN1YmUiID0gInJlZDEiLA0KICAiTmludGVuZG8gRFMiID0gInJlZDIiLA0KICAiTmludGVuZG8gV2lpIiA9ICJyZWQzIiwNCiAgIk5pbnRlbmRvIEdhbWUgQm95IiA9ICJyZWQ0IiwNCiAgIlBDIiA9ICJibGFjayIpDQoNCmdhbWVfc2FsZXMgJT4lIA0KICBncm91cF9ieShwdWJsaXNoZXIsIHBsYXRmb3JtX2NhdCkgJT4lIA0KICBzdW1tYXJpc2UodG90YWxfZ2FtZXMgPSBuKCkpICU+JSANCiAgcGxvdF9seSh5ID0gfiByZW9yZGVyKHB1Ymxpc2hlciwgdG90YWxfZ2FtZXMsIHN1bSksDQogICAgICAgICAgeCA9IH4gdG90YWxfZ2FtZXMsDQogICAgICAgICAgY29sb3IgPSB+IHBsYXRmb3JtX2NhdCwNCiAgICAgICAgICBjb2xvcnMgPSBjb2xvdXJfc2NoZW1lLA0KICAgICAgICAgIHR5cGUgPSAiYmFyIg0KICApICU+JSANCiAgbGF5b3V0KGJhcm1vZGUgPSAic3RhY2siLA0KICAgICAgICAgdGl0bGUgPSAiTnVtYmVyIG9mIEdhbWVzIFJlbGVhc2VkIGJ5IFB1Ymxpc2hlciBBY3Jvc3MgRWFjaCBQbGF0Zm9ybSIsDQogICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiIiksDQogICAgICAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiTnVtYmVyIG9mIEdhbWVzIHJlbGVhc2VkIikNCiAgKQ0KYGBgDQoNCmBgYHtyfQ0KZ2FtZV9zYWxlcyAlPiUgDQogIGZpbHRlcihwdWJsaXNoZXIgPT0gIk1pZHdheSBHYW1lcyIpICU+JSANCiAgZ3JvdXBfYnkoeWVhcl9vZl9yZWxlYXNlKSAlPiUgDQogIHN1bW1hcmlzZSh0b3RhbF9nYW1lcyA9IG4oKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHllYXJfb2ZfcmVsZWFzZSwgdG90YWxfZ2FtZXMpKSArDQogIGdlb21fbGluZSgpICsNCiAgdGhlbWVfY2xhc3NpYygpDQpgYGANCg0KYGBge3J9DQpnYW1lX3NhbGVzICU+JSANCiAgZ3JvdXBfYnkocGxhdGZvcm1fY2F0LCBwbGF0Zm9ybSkgJT4lIA0KICBzdW1tYXJpc2UodG90YWwgPSBuKCkpICU+JSANCiAgZ2dwbG90KGFlcyhwbGF0Zm9ybV9jYXQsIHRvdGFsLCBmaWxsID0gcGxhdGZvcm0pKSArDQogIGdlb21fY29sKCkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGxhdGZvcm0pKQ0KYGBgDQoNCg==